package com.itheima.tlias84.controller;

import com.itheima.tlias84.dto.SelectAllDeptDTO;
import com.itheima.tlias84.entity.Dept;
import com.itheima.tlias84.po.InstertDeptParam;
import com.itheima.tlias84.service.DeptService;
import com.itheima.tlias84.utils.ResultUtil;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@Slf4j
@RestController
@RequestMapping("/depts")
@CrossOrigin
/**
 * @RequestMapping Target-> 类上，方法上
 *                   类上->提取一个controller中的重复路径
 *                   方法上->定义该接口的请求方法的，被对应的GetMapping/PostMapping等替代了
 */
public class DeptController {
    @Autowired
    DeptService deptService;

    @GetMapping
    public ResultUtil selectAll() {
        List<SelectAllDeptDTO> depts = deptService.selectAll();
        return ResultUtil.success(depts);
    }

    /**
     * get/delete 请求参数一般拼接到url后面
     * post/put 请求参数一般放在请求体里面，且以JSON格式进行传输
     *
     * @param
     * @return
     * @RequestBody 作用1:就是从http请求体中读传输的数据
     * 作用2:把JSON字符串自动变成对象
     */
    @PostMapping
    public ResultUtil insertDept(@RequestBody InstertDeptParam param) {
        log.info("读取请求体中的数据{}", param.getName());
        int i = deptService.insertDept(param);
        return i == 0 ? ResultUtil.fail("新增失败") : ResultUtil.success("新增成功");
    }

    /**
     * @param id
     * @return
     * @RequestParam 作用:1.根据指定的k，获取Http URL中的值
     * 2.可以指定参数是否传参数，如果指定必传，前端没传相应参数->400
     * 3.给参数指定默认值 defaultValue 默认值属性
     */

    @DeleteMapping
    public ResultUtil deleteById(@RequestParam("id") Integer id) {
        log.info("删除id{}", id);
        int i = deptService.deleteById(id);
        return i == 0 ? ResultUtil.fail("删除失败") : ResultUtil.success("删除成功");
    }

    /**
     * @param id
     * @return
     * @PathVariable 注解作用
     * 获取URI以/分割 的路径变量
     */
    @GetMapping("/{id}")
    public ResultUtil selectNameById(@PathVariable Integer id) {
        log.info("使用PathVariable注解获取{}", id);
        SelectAllDeptDTO dto = deptService.selectById(id);
        return ResultUtil.success(dto);
    }

    @PutMapping
    public ResultUtil updateDeptById(@RequestBody Dept dept) {
        log.info("名字{}", dept.getName());
        return deptService.updateDeptById(dept);
    }

    @DeleteMapping("batchDelect")
    public ResultUtil batchDelete(@RequestParam("ids") List<Integer> ids, HttpServletRequest request) {
        String[]isd1 = request.getParameterValues("ids");
        log.info("通过servlet取重复参数{}", isd1);
        log.info("接收到的id= {}", ids);
        deptService.batchDelete(ids);
        return null;
    }
}
